package model;

import dzienPracy.DzienPracy;

import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
import java.util.Date;

public class TableModel extends AbstractTableModel {     //ctrl + i --> implementacja metod
    private String [] nazwyKolum;
    private ArrayList<DzienPracy> wierszeTabeli;

    public TableModel() {
        nazwyKolum = new String[]{"Data", "Godzina przyjścia", "Godzina wyjścia", "Ilość godzin"};
        wierszeTabeli = new ArrayList<DzienPracy>();
    }

    public void dodajWiersz (DzienPracy dzienPracy){
        wierszeTabeli.add(dzienPracy);
        fireTableDataChanged();  // --> Metoda służy do odświeżania widoku tabeli
    }

    public void usunWiersz (int numerWiersza){
        wierszeTabeli.remove(numerWiersza);
        fireTableDataChanged();
    }

    public boolean czyJestJuzTakaData(Date date) {
        for(DzienPracy dzienPracy : wierszeTabeli){
            if(dzienPracy.getData().equals(date)) {
                return true;
            }
        }
        return false;
    }

    public String sumaPrzepracowanychGodzinST(){
        int godziny = 0;
        int minuty = 0;

        for (DzienPracy dzienPracy : wierszeTabeli) {
            godziny += dzienPracy.getIloscPrzepracowanychGodzin();  // --> dodawanie wartości do zmiennej
            minuty += dzienPracy.getIloscPrzepracowanychMinut();
        }

        if(minuty>59){
            godziny += minuty/60;
            minuty += minuty %60;
        }
        if(minuty<10){
            return godziny + " godz. 0" + minuty + " min.";
        } else {
            return godziny + "godz. " + minuty + " min.";
        }
    }


    @Override
    public int getRowCount() {
        return wierszeTabeli.size();
    }

    @Override
    public int getColumnCount() {
        return nazwyKolum.length;
    }

      @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex){
            case 0:
                return wierszeTabeli.get(rowIndex).getDataString();
            case 1:
                return wierszeTabeli.get(rowIndex).getGodzinePrzyjsciaST();
            case 2:
                return wierszeTabeli.get(rowIndex).getGodzineWyjsciaST();
            case 3:
                return wierszeTabeli.get(rowIndex).getIloscPrzepracowanychGodzinST();
            default:
                return "brak";
        }
    }

    @Override
    public String getColumnName(int column) {    //ctrl + o --> nadpisywanie metod z klasy bazowej
        return nazwyKolum[column];
    }

    public ArrayList<DzienPracy> getWierszeTabeli() {
        return wierszeTabeli;
    }

    public void setWierszeTabeli(ArrayList<DzienPracy> wierszeTabeli) {
        if (wierszeTabeli == null)
            this.wierszeTabeli = new ArrayList<DzienPracy>();
        else
            this.wierszeTabeli = wierszeTabeli;

        fireTableDataChanged();
    }
}
